package com.lightsh.graphics;

import android.graphics.Canvas;
import android.graphics.Paint;

/**
 * 一个可改变状态，并且可绘制的图形
 * FIXME 我们需要传入一个大小来限制绘制的大小...
 *
 */
public abstract class ChangeableDrawable {	
	
	/**
	 * 切换到下一帧需要的间隔
	 */
	public int mNextFrameDelay;
	
	/**
	 * 当前经过的间隔
	 */
	public int mDelay;
	
	public ChangeableDrawable(){
		mNextFrameDelay = 1;
		mDelay = 0;
	}
	
	public ChangeableDrawable(int nextFrameDelay){
		mNextFrameDelay = nextFrameDelay;
	}
	
	/**
	 * 更新到下一个状态
	 */
	public void update(){
		if(mDelay++ >= mNextFrameDelay){
			mDelay = 0;
			nextFrame();
		}
	}
	
	/**
	 * 切换到下一帧,子类在该方法中实现切换需要做的工作
	 */
	protected abstract void nextFrame();
	
	/**
	 * 绘制自己到canvas中
	 * @param canvas 			目标画布
	 * @param paint				绘制的paint
	 * @param startX			开始绘制的x位置
	 * @param startY 			开始绘制的y位置
	 */
	public void draw(Canvas canvas, Paint paint, int startX, int startY){
		draw(canvas, paint, startX, startY, 1f);
	}
	
	/**
	 * 根据缩放比例，绘制自己到canvas中
	 * @param canvas 			目标画布
	 * @param paint				绘制的paint
	 * @param startX			开始绘制的x位置
	 * @param startY 			开始绘制的y位置
	 * @param worldscale		需要缩放的比例。注意，startX和startY也需要做对应的缩放处理
	 */
	public abstract void draw(Canvas canvas, Paint paint, int startX, int startY, float worldscale);
}
